using System;

namespace LegoBotPrimaAbstractions.Extensions
{
    public static class String_Ext
    {
        public static string Args(this string str, object arg0)
        {
            return string.Format(str, arg0);
        }
        public static string Args(this string str, object arg0, object arg1)
        {
            return string.Format(str, arg0, arg1);
        }
        public static string Args(this string str, object arg0, object arg1, object arg2)
        {
            return string.Format(str, arg0, arg1, arg2);
        }
        public static string Args(this string str, params object[] args)
        {
            return string.Format(str, args);
        }



        public static int ToIntOrDefault(this string str, int defaultValue)
        {
            return str.ParseOrDefault(defaultValue, Int32.Parse);
        }
        public static double ToDoubleOrDefault(this string str, double defaultValue)
        {
            return str.ParseOrDefault(defaultValue, Double.Parse);
        }
        public static bool ToBooleanOrDefault(this string str, bool defaultValue)
        {
            return str.ParseOrDefault(defaultValue, Boolean.Parse);
        }


        public static T ParseOrDefault<T>(this string str, T defaultValue, Func<string, T> parser)
        {
            if (string.IsNullOrEmpty(str)) return defaultValue;

            try
            {
                return parser(str);
            }
            catch(FormatException)
            {
                return defaultValue;
            }
        }
    }
}